From d8eb58d129523eba13a50c59853f91c09ac12f73 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Fri, 13 Jul 2007 13:49:08 +0100 Subject: [PATCH] Implement domctl_sendtrigger_nmi for x86 hvm. This patch implements DOMCTL_SENDTRIGGER_NMI hypercall for x86 hvm domains. We can manually inject NMI into a domain by using 'xm trigger [domain] nmi [vcpu]'. Signed-off-by: Yosuke Iwamatsu --- xen/arch/x86/domctl.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 36dd4a5719..a42efee417 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -427,6 +427,46 @@ long arch_do_domctl( } break; + case XEN_DOMCTL_sendtrigger: + { + struct domain *d; + struct vcpu *v; + + ret = -ESRCH; + if ( (d = rcu_lock_domain_by_id(domctl->domain)) == NULL ) + break; + + ret = -EINVAL; + if ( domctl->u.sendtrigger.vcpu >= MAX_VIRT_CPUS ) + goto sendtrigger_out; + + ret = -ESRCH; + if ( (v = d->vcpu[domctl->u.sendtrigger.vcpu]) == NULL ) + goto sendtrigger_out; + + switch ( domctl->u.sendtrigger.trigger ) + { + case XEN_DOMCTL_SENDTRIGGER_NMI: + { + ret = -ENOSYS; + if ( !is_hvm_domain(d) ) + break; + + ret = 0; + if ( !test_and_set_bool(v->arch.hvm_vcpu.nmi_pending) ) + vcpu_kick(v); + } + break; + + default: + ret = -ENOSYS; + } + + sendtrigger_out: + rcu_unlock_domain(d); + } + break; + default: ret = -ENOSYS; break; -- 2.30.2